
let db = require('../utils/DB');//数据库
let to = require('../utils/await-to-js');
let { SUCCESS1, ERROR } = require('../utils/result');//结果
let HS256 = require('../utils/hs256');
let jwt = require('../utils/jwt');



/*
    登录功能
*/
function loginModel() {
    return async (req, res) => {
        // 获取用户提交的数据
        let { user = '', password = '' } = req.body;

        //表单数据校验 (正则校验)
        if (user == '' || password == '') {
            ERROR(res, '登录失败', '用户名和密码不能为空');
            return;
        }

        let [err, data] = await to(login(user, HS256(password)));//登录操作  
        if (err) {
            ERROR(res, '登录失败', err);
            return;
        }
        let obj = data[0];//取出已登录的用户数据 
        //使用jwt技术生成token，将token传输给客户端，在客户端存储token （保存在localStorage中），
        //token有效说明用户处于登录状态，则可以进行敏感操作，若无token或者token失效，则需要重新登录
        let h = jwt.jsonToBase64(jwt.header);//base64格式的头
        // jwt.playload.uid=obj.uid;//将uid保存在playload中
        jwt.playload.uid = '6012de3a-3101-11e9-811c-e0accb719100';//测试数据
        let p = jwt.jsonToBase64(jwt.playload);//base64格式的荷载
        let token = jwt.generator(h, p);//生成jwt
        //登录成功
        SUCCESS1(res, {
            token,
            uid: obj.uid,
            username: obj.username
        });
    };
}


//登录功能
function login(username, pwd) {
    return db.query(`SELECT * FROM member WHERE username=? AND password=?`, [username, pwd]);
}


module.exports = loginModel;